"""
序列及其基本操作介绍
序列：有序排列的对象就叫序列，例如字符串、列表等。字符串 'abc' 与 ’acb‘ 就不是同一个对象
"""
a = '123'
b = '456'

# 1. + 连接操作。左右两边需要是相同类型（需要注意的是，布尔类型是个例外，布尔类型可以和整形做 + ）
a_b = a + b
print(a_b)
print(a)
print(b)
# 如下将报错 TypeError: can only concatenate str (not "int") to str
# a_ = a + 5

# 2. * 获取重复元素操作
a_ = a * 4
print(a_)
print(a)

# 3. len 获取字符长度
i = len(a_)
print(i)
s = '获取字符长度'
print(len(s))

# 4. in 判断指定字符是否在某个字符串中
print('取' in s)
print('1' in s)

# 5. 索引。从左边建立索引以0 开始，从右边建立索引则以 -1 开始（没有 -0 这个说法吧）
d = "this is index"
print(d[0])
print(d[-1])
# print(d[-1]) 的等价形式
print(d[len(d) - 1])

# 6. 切片
d_ = d[1:len(d)]
# 切片操作生成了一个新的字符串。不会影响原来的字符串（往大了说就是序列），这和golang中的slice切片操作是不同的
print(d_)
print(d)
d_4 = d[3:5]
print(d_4)
print(d)
d_2 = d[:8]
print(d_2)
print(d)
d_3 = d[2:]
print(d_3)
print(d)
d_1 = d[:]
print(d_1)
print(d)
d_6 = d[0:-1]
print(d_6)
print(d)
# 切片默认步长是1，但是我们可以指定步长，例如下面指定步长为2
d_5 = d[0::2]
# 输出 ti sidx
print(d_5)
print(d)
# 切片操作的步长也可以指定为负数，那么就是从序列的右边开始操作
# xedni si siht 。相当于逆序输出
d_7 = d[::-1]
print(d_7)
print(d)
# 需要注意，步长为负数时，切片和起始 和 结束 索引和步长为正数相比，是反着的
d_8 = d[8:2:-2]
print(d_8)
print(d)
d_9 = d[-5:2:-2]
print(d_9)
print(d)
